﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using System.Data;
using BL;

namespace UI.Tesoreria
{
    public partial class FrmSalidaCaja : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //LLenarComboTipoCp();
                //LLenarComboPeriodos();
                SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
                if (cp == null)
                {
                    cp = new SalidaCaja();
                    Session["SalidaCaja"] = cp;
                    LLenarCabecera();
                }
                else
                {
                    LLenarDesdeCp();
                }
            }
            else { 
            
            }

        }

        private void LLenarDesdeCp(){
            MostrarCabecera();
            MostrarItems();
        }

        private void LLenarCabecera()
        {
            labelErrorCp.Text = "";
            try
            {
                SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
                LLenarComboPeriodos();
                LLenarComboTipoCp();
                LlenarComboCajaDiarias();
                if (cp.TipoDocumento != null)
                {
                    ComboPeriodo.Text = cp.TipoDocumento.Nombre;
                }
                else {
                    ComboPeriodo.Text = "";
                }



                if (cp.IDCajaDiaria>= 0)
                {
                    CajaDiaria_BL cajad = new CajaDiaria_BL();
                    ComboTipoDocumento.SelectedValue = cp.IDCajaDiaria.ToString();
                }
                else
                {
                    ComboTipoDocumento.Text = "";
                }



                txtFechaDocumento.Text = DateTime.Now.ToShortDateString();
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();

            }
        }


        private void LlenarComboCajaDiarias()
        {
            labelErrorCp.Text = "";
            try
            {
                EntradaCaja_BL cp = new EntradaCaja_BL();
                DataTable lista = cp.ObtenerCajaDiarias();
                ComboCaja.DataSource = lista;
                ComboCaja.DataTextField = "CajaDiaria";
                ComboCaja.DataValueField = "id";
                ComboCaja.DataBind();
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }
        }


        private void LLenarComboTipoCp()
        {
            labelErrorCp.Text = "";
            try
            {
                SalidaCaja_BL cp = new SalidaCaja_BL();
                List<TipoDocumentoCaja> lista = cp.ObtenerTipoDocumentos();
                ComboTipoDocumento.DataSource = lista;
                ComboTipoDocumento.DataTextField = "Nombre";
                ComboTipoDocumento.DataValueField = "IDTipoCp";
                ComboTipoDocumento.DataBind();
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }
        }
        private void LLenarComboPeriodos()
        {
            labelErrorCp.Text = "";
            try
            {
            ComprobanteVenta_BL cp = new ComprobanteVenta_BL();
            List<Periodo> lista = cp.ObtenerPeriodos();
            ComboPeriodo.DataSource = lista;
            ComboPeriodo.DataTextField = "Semestre";
            ComboPeriodo.DataValueField = "ID";
            ComboPeriodo.DataBind();
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }
        }
        public void MostrarCabecera() { 
            labelErrorCp.Text = "";
            try
            {
                SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
                txtFechaDocumento.Text = DateTime.Now.ToShortDateString();
                
                
                cp.Numeracion = cp.Numeracion;
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }        
        }
        public void MostrarItems() {
            SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
            DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(System.String));
            dt.Columns.Add("Concepto", typeof(System.String));
            dt.Columns.Add("Monto", typeof(System.String));
            dt.Columns.Add("Observacion", typeof(System.String));
            foreach (ItemSalidaCaja item in cp.Items)
            {
                DataRow row = dt.NewRow();
                row["id"] = item.ID;
                row["Concepto"] = item.Concepto;
                row["Monto"] = Math.Round(item.Monto);
                row["Observacion"] = item.Observacion;
                dt.Rows.Add(row);
            }
            GridDetalle.DataSource = dt;
            GridDetalle.DataBind();
        }
        private void GrabarCabecera()
        {
            labelErrorCp.Text = "";
            try
            {
                String tipocp = (ComboTipoDocumento.SelectedItem != null) ? ComboTipoDocumento.SelectedItem.Value : "";
                String periodo = (ComboPeriodo.SelectedItem != null) ? ComboPeriodo.SelectedItem.Value : "";
                String caja = (ComboCaja.SelectedItem != null) ? ComboCaja.SelectedItem.Value : "";
                SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];

                cp.CampoExtra = txtCampoExtra.Text;

                TipoDocumento_BL tipobl = new TipoDocumento_BL();
                cp.TipoDocumento = tipobl.obtenerTipoCajaPorId(tipocp);

                ComprobanteVenta_BL cpbl = new ComprobanteVenta_BL();
                cp.Periodo = cpbl.obtenerPeriodoxId(periodo);
                cp.FechaDocumento = Convert.ToDateTime(txtFechaDocumento.Text);

                cp.IDCajaDiaria = Convert.ToInt32(caja);

                cp.FechaDocumento = Convert.ToDateTime(txtFechaDocumento.Text);

            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }


        }

        private void GrabarItemACpventa()
        {
            SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
            foreach (GridViewRow row in GridDetalle.Rows)
            {
                String id = (String)GridDetalle.DataKeys[row.RowIndex].Value;
                TextBox txtConcepto = row.FindControl("txtConcepto") as TextBox;
                TextBox txtMonto = row.FindControl("txtMonto") as TextBox;
                TextBox txtObservacion = row.FindControl("txtObservacion") as TextBox;

                foreach (ItemSalidaCaja item in cp.Items)
                {
                    if (item.ID.ToString() == id)
                    {
                        item.Concepto = txtConcepto.Text;
                        item.Monto = Convert.ToDecimal(txtMonto.Text);
                        item.Observacion = txtObservacion.Text;
                        break;
                    }
                }
            }
        }


        protected void btnAgregarItem_Click1(object sender, ImageClickEventArgs e)
        {
            GrabarItemACpventa();
            SalidaCaja salida =(SalidaCaja)Session["SalidaCaja"] ;
            ItemSalidaCaja item = salida.AgregarItem();
            MostrarItems();
        }

        protected void GridDetalle_RowCommand(object sender, GridViewCommandEventArgs e)
        {

        }

        protected void GridDetalle_SelectedIndexChanged(object sender, EventArgs e)
        {
            SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
            GridViewRow filaseleccionada = GridDetalle.SelectedRow;

            String idModificado = (String)GridDetalle.DataKeys[filaseleccionada.RowIndex].Value;
            foreach (ItemSalidaCaja item in cp.Items)
            {
                if (item.ID.ToString() == idModificado)
                {
                    cp.Items.Remove(item);
                    break;
                }
            }
            MostrarItems();
        }

        protected void grvAgregaAlumnos_SelectedIndexChanged(object sender, EventArgs e)
        {
            labelErrorCp.Text = "";
            try
            {
                GridViewRow filaseleccionada = grvAgregaAlumnos.SelectedRow;
                String idSeleccionado = (String)grvAgregaAlumnos.DataKeys[filaseleccionada.RowIndex].Value;
                SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
                SalidaCaja_BL cpbl = new SalidaCaja_BL();
                cp.SocioNegocio = cpbl.ObtenerSocioNegocioxCodigo(idSeleccionado);
                txtSocioNegocio.Text = cp.SocioNegocio.ApellidoMaterno + " " + cp.SocioNegocio.ApellidoMaterno + ", " + cp.SocioNegocio.Nombres;
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }
           

        }


        private void CalcularTotales()
        {
            Decimal SubTotal = 0;
            Decimal Impuesto = 0;
            Decimal Total = 0;
            SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];
            
            foreach (ItemSalidaCaja item in cp.Items)
            {
                SubTotal += item.Monto;
            }
            Impuesto = SubTotal * (cp.TipoDocumento.Impuesto / 100);
            Total = SubTotal + Impuesto;

            cp.SubTotal = SubTotal;
            cp.Impuesto = Impuesto;
            cp.Total = Total;
        }

        protected void btnGuardarCpVenta_Click(object sender, ImageClickEventArgs e)
        {
            labelErrorCp.Text = "";
            try
            {
                GrabarCabecera();
                GrabarItemACpventa();
                CalcularTotales();
                SalidaCaja_BL cpbl = new SalidaCaja_BL();
                SalidaCaja cp = (SalidaCaja)Session["SalidaCaja"];

                cp.FechaCreacion = DateTime.Now;
                cp.CreadoPor = User.Identity.Name;

                cpbl.Insertar(cp);
                Response.Redirect("FrmSalidaCajaLista.aspx");
            }
            catch (Exception ex)
            {
                labelErrorCp.Text = ex.Message.ToString();
            }

        }

        protected void btnBuscarEmpleado_Click(object sender, ImageClickEventArgs e)
        {
            mpeAgregaSocioNegocio.Show();
        }

        protected void btnBuscarModal_Click(object sender, EventArgs e)
        {
            labelErrorBusSN.Text = "";
            try
            {
                SalidaCaja_BL salidabl = new SalidaCaja_BL();
                String nombre = txtModalCodigo.Text;
                grvAgregaAlumnos.DataSource = salidabl.BuscarSocioNegocio(nombre);
                grvAgregaAlumnos.DataBind();

            }
            catch (Exception ex)
            {
                labelErrorBusSN.Text=ex.Message.ToString();
            }
            
        }

        protected void btnBusSalirSN_Click(object sender, EventArgs e)
        {
            mpeAgregaSocioNegocio.Hide();
        }

        protected void ImageButton4_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("FrmSalidaCajaLista.aspx");
        }




    }
}